<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one or more
  ~ contributor license agreements.  See the NOTICE file distributed with
  ~ this work for additional information regarding copyright ownership.
  ~ The ASF licenses this file to You under the Apache License, Version 2.0
  ~ (the "License"); you may not use this file except in compliance with
  ~ the License.  You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<div class="flex flex-col h-full">
    <header class="mb-5 nifi-header">
        <navigation></navigation>
    </header>
    <div class="pb-5 px-5 flex-1 flex flex-col">
        <h3 class="primary-color">Controller Services</h3>
        @if (serviceState(); as serviceState) {
            @if (isInitialLoading(serviceState)) {
                <div>
                    <ngx-skeleton-loader count="3"></ngx-skeleton-loader>
                </div>
            } @else {
                <div class="flex flex-col h-full gap-y-2">
                    <div class="flex justify-between items-center w-full">
                        <div class="flex-1 min-w-0 mr-4">
                            <breadcrumbs
                                [entity]="serviceState.breadcrumb"
                                [currentProcessGroupId]="serviceState.processGroupId"></breadcrumbs>
                        </div>
                        <div class="flex items-center gap-x-3 shrink-0">
                            @if (shouldShowFilter()) {
                                <div class="flex items-center justify-between gap-x-2 current-scope-only">
                                    <mat-checkbox [(ngModel)]="showCurrentScopeOnly" data-qa="current-scope-filter">
                                    </mat-checkbox>
                                    <div class="flex items-center justify-between gap-x-1">
                                        <label
                                            class="cursor-pointer select-none whitespace-nowrap nifi-body"
                                            (click)="toggleFilter()"
                                            data-qa="current-scope-label">
                                            Show current scope only
                                        </label>
                                        <i
                                            class="fa fa-info-circle"
                                            nifiTooltip
                                            [tooltipComponentType]="TextTip"
                                            [tooltipInputData]="getFilterTooltip(serviceState.breadcrumb)"
                                            data-qa="current-scope-help"></i>
                                    </div>
                                </div>
                            }
                            @if (serviceState.breadcrumb.permissions.canWrite) {
                                <button
                                    mat-icon-button
                                    class="primary-icon-button"
                                    (click)="openNewControllerServiceDialog()">
                                    <i class="fa fa-plus"></i>
                                </button>
                            }
                        </div>
                    </div>
                    @if (flowConfiguration$ | async; as flowConfiguration) {
                        <div class="flex-1">
                            <controller-service-table
                                [selectedServiceId]="selectedServiceId$ | async"
                                [controllerServices]="filteredControllerServices()"
                                [formatScope]="formatScope(serviceState.breadcrumb)"
                                [definedByCurrentGroup]="definedByCurrentGroup(serviceState.breadcrumb)"
                                [currentUser]="(currentUser$ | async)!"
                                [flowConfiguration]="flowConfiguration"
                                [canModifyParent]="canModifyParent(serviceState.breadcrumb)"
                                (selectControllerService)="selectControllerService($event)"
                                (viewControllerServiceDocumentation)="viewControllerServiceDocumentation($event)"
                                (configureControllerService)="configureControllerService($event)"
                                (openAdvancedUi)="openAdvancedUi($event)"
                                (manageAccessPolicies)="navigateToManageComponentPolicies($event)"
                                (enableControllerService)="enableControllerService($event)"
                                (disableControllerService)="disableControllerService($event)"
                                (viewStateControllerService)="viewStateControllerService($event)"
                                (changeControllerServiceVersion)="changeControllerServiceVersion($event)"
                                (goToControllerService)="navigateToControllerService($event)"
                                (deleteControllerService)="deleteControllerService($event)"
                                (clearBulletinsControllerService)="
                                    clearBulletinsControllerService($event)
                                "></controller-service-table>
                        </div>
                    }
                    <div class="flex justify-between">
                        <div class="text-sm flex items-center gap-x-2">
                            <button
                                mat-icon-button
                                class="primary-icon-button"
                                (click)="refreshControllerServiceListing()">
                                <i class="fa fa-refresh" [class.fa-spin]="serviceState.status === 'loading'"></i>
                            </button>
                            <div>Last updated:</div>
                            <div class="tertiary-color font-medium">
                                {{ serviceState.loadedTimestamp }}
                            </div>
                        </div>
                    </div>
                </div>
            }
        }
    </div>
</div>
